package edu.asselvi.seguros.dao;

import java.sql.Connection; 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import edu.asselvi.seguros.db.ConnectionFactory;
import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErros;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Endereco;


public class EnderecoDao extends DbUtils {

	Connection conn = null;
	
	public EnderecoDao(Connection conn) {
		this.conn = conn;
	}
	
	public EnderecoDao() throws SegurosException {
		this.conn = new ConnectionFactory().getConnection();
	}
	

	public Endereco insert (Endereco endereco) throws SegurosException {

		String sql = "INSERT INTO ENDERECOS(ID_ENDERECO, RUA, CEP, FK_ID_CIDADE) VALUES (?, ?, ?, ?)";
		PreparedStatement p = null;

		try {
			endereco.setId_endereco(getNextId("SEQ_ENDERECOS", conn));

			p = conn.prepareStatement(sql);
			int cont = 1;
			p.setInt(cont++, endereco.getId_endereco());
			p.setString(cont++, endereco.getRua());
			p.setString(cont++, endereco.getCep());
			p.setInt(cont++, endereco.getFk_id_cidade());

			p.executeUpdate();

		} catch (SQLException e) {
			throw new SegurosException(ESegurosErros.ERRO_INSERCAO);
		} finally {
			close(p);
		}
		
		return endereco;
	}


	public Endereco getById(int id_endereco) throws SegurosException {

		String sql = "SELECT * FROM ENDERECOS WHERE ID_ENDERECO = ?";

		Endereco endereco = new Endereco();
		PreparedStatement p = null;
		ResultSet rs = null;
		
		try {
			p = conn.prepareStatement(sql);
			p.setInt(1, id_endereco);
			rs = p.executeQuery();

			while (rs.next()) {
				endereco.setId_endereco(rs.getInt("ID_ENDERECO"));
				endereco.setRua(rs.getString("RUA"));
				endereco.setCep(rs.getString("CEP"));
				endereco.setFk_id_cidade(rs.getInt("FK_ID_CIDADE"));
				
			}
		} catch (SQLException e) {
			throw new SegurosException(ESegurosErros.ERRO_RECUPERAR_DADOS);
			
		} finally {
			close(p);
			close(rs);
		}
		return endereco;		
	}
	
	public void update (Endereco endereco) throws SQLException {

		String sql = "UPDATE ENDERECOS SET RUA = ?, CEP = ?, FK_ID_CIDADE =? WHERE ID_ENDERECO = ?";

		PreparedStatement p = null;
		
		try {
			p = conn.prepareStatement(sql);
			int cont = 1;
			p.setString(cont++, endereco.getRua());
			p.setString(cont++, endereco.getCep());
			p.setInt(cont++, endereco.getFk_id_cidade());
			p.setInt(cont++, endereco.getId_endereco());

			p.executeUpdate();
			p.close();
			conn.close();

		} finally {
			close(p);
		}
		
	}

	public void remove(int id_endereco) throws SegurosException {
		
		String sql = "DELETE FROM ENDERECOS WHERE ID_ENDERECO = ?";

		PreparedStatement p = null;
		
		try {
			p = conn.prepareStatement(sql);
			p.setInt(1, id_endereco);
			
			p.executeUpdate();

		} catch (SQLException e) {
//			e.printStackTrace();
			throw new SegurosException(ESegurosErros.ERRO_REMOVER_DADOS);
		} finally {
			close(p);
		}
		
	}

	
	
}